# |	匹配左右任意一个表达式
# (ab)	将括号中字符作为一个分组
# \num	引用分组num匹配到的字符串
# (?P<name>)	分组起别名
# (?P=name)	引用别名为name分组匹配到的字符串

import re

# 水果列表
my_list = ['apple', 'banana', 'peach', 'orange', 'pear']

# 遍历列表
for value in my_list:
    match_obj = re.match("apple|orange", value)
    if match_obj:
        print("%s 是我们想要吃的" % match_obj.group())
    else:
        print("%s 不是我们想要吃的" % value)

# 匹配邮箱，126，163，qq等
# \. 对正则表达式进行转意，让正则表达式里面的点作为普通的点来使用
match_obj = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq)\.com", "hello@163.com")
if match_obj:
    # 默认获取的是第0个分组的数据
    print(match_obj.group(0))
    # 获取分组数据，根据分组编号，分组编号是从左到右依次累加，从1开始
    print(match_obj.group(1))
else:
    print("匹配失败")

# qq:10567
match_obj = re.match("(qq):([1-9]\d{4,11})", "qq:10567")
if match_obj:
    # 默认获取的是第0个分组的数据
    print(match_obj.group(0))
    # 获取分组数据，根据分组编号，分组编号是从左到右依次累加，从1开始
    print(match_obj.group(1))
    print(match_obj.group(2))
    # 以后想要获取匹配的某部分数据，可以把某部分数据放到一个分组里面进行提取
else:
    print("匹配失败")

# <html>hh</html>
match_obj = re.match("<[a-zA-Z1-6]+>.*</[a-zA-Z1-6]+>", "<html>hh</div>")
if match_obj:
    # 默认获取的是第0个分组的数据
    print(match_obj.group(0))
else:
    print("匹配失败")

# \1 \t 都是特殊字符，引用分组匹配到的数据必须是一个真正意义上的反斜杠 \num
match_obj = re.match("<([a-zA-Z1-6]+)>.*</\\1>", "<html>hh</html>")
if match_obj:
    # 默认获取的是第0个分组的数据
    print(match_obj.group(0))
else:
    print("匹配失败")

# <html><h1>www.itcast.cn</h1></html>
match_obj = re.match("<([a-zA-Z1-6]+)><([a-zA-Z1-6]+)>.*</\\2></\\1>", "<html><h1>www.itcast.cn</h1></html>")
if match_obj:
    # 默认获取的是第0个分组的数据
    print(match_obj.group(0))
else:
    print("匹配失败")

# 设置分组别名并引用分组别名匹配到的数据
match_obj = re.match("<(?P<name1>[a-zA-Z1-6]+)><(?P<name2>[a-zA-Z1-6]+)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
if match_obj:
    # 默认获取的是第0个分组的数据
    print(match_obj.group(0))
else:
    print("匹配失败")